MongoDB হলো একটি NoSQL ডেটাবেস যা ডেটা সঞ্চয় এবং পরিচালনার জন্য ব্যবহার করা হয়। FastAPI এবং MongoDB একসাথে ব্যবহার করে আপনি ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশন সম্পাদন করতে পারেন। FastAPI-র সাথে MongoDB ব্যবহারের জন্য আমরা motor লাইব্রেরি ব্যবহার করব, যা MongoDB-এর জন্য একটি অ্যাসিঙ্ক্রোনাস ড্রাইভার।
এই টিউটোরিয়ালে আমরা দেখব কীভাবে FastAPI এবং MongoDB এর মাধ্যমে CRUD অপারেশন সম্পাদন করা যায়।
Step 1: প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন
প্রথমে, MongoDB ব্যবহার করতে motor লাইব্রেরি এবং FastAPI ইনস্টল করতে হবে:
pip install fastapi
pip install uvicorn
pip install motor
Step 2: MongoDB এর সাথে সংযোগ স্থাপন
MongoDB-তে সংযোগ স্থাপন করতে motor ব্যবহার করা হবে, যা একটি অ্যাসিঙ্ক্রোনাস ড্রাইভার।
MongoDB সংযোগ কনফিগারেশন:
from motor.motor_asyncio import AsyncIOMotorClient
from fastapi import FastAPI
app = FastAPI()
# MongoDB ডাটাবেসের সংযোগ
@app.on_event("startup")
async def startup_db():
app.mongodb_client = AsyncIOMotorClient("mongodb://localhost:27017") # MongoDB URL
app.db = app.mongodb_client["mydatabase"] # ডাটাবেসের নাম
print("Connected to MongoDB")
@app.on_event("shutdown")
async def shutdown_db():
app.mongodb_client.close()
print("MongoDB connection closed")
এখানে:
AsyncIOMotorClient: MongoDB এর জন্য অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট তৈরি করা হয়েছে।app.db: MongoDB ডাটাবেসের সংযোগ।on_event("startup"): অ্যাপের শুরুতে MongoDB সংযোগ করা হবে।on_event("shutdown"): অ্যাপ বন্ধ করার সময় MongoDB সংযোগ বন্ধ হবে।
Step 3: MongoDB Collection এর সাথে CRUD অপারেশন
1. Create (ডেটা তৈরি করা)
MongoDB তে নতুন ডকুমেন্ট তৈরি করতে insert_one() ব্যবহার করা হয়।
from pydantic import BaseModel
from fastapi import HTTPException, status
class Item(BaseModel):
name: str
description: str | None = None
price: float
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
item_dict = item.dict()
result = await app.db["items"].insert_one(item_dict) # "items" collection এ ডেটা সংরক্ষণ
item_dict["_id"] = str(result.inserted_id) # inserted_id MongoDB থেকে ফেরত আসে
return item_dict
এখানে:
insert_one(item_dict): নতুন ডকুমেন্টitemscollection এ ইনসার্ট করা হয়।inserted_id: MongoDB থেকে ফেরত আসা ইনসার্টেড ডকুমেন্টের আইডি।
2. Read (ডেটা পড়া)
MongoDB তে ডেটা পড়তে find_one() অথবা find() ব্যবহার করা হয়।
@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: str):
item = await app.db["items"].find_one({"_id": item_id}) # আইডি অনুসারে ডেটা খোঁজা
if item is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")
return {"name": item["name"], "description": item.get("description", None), "price": item["price"]}
এখানে:
find_one():item_idঅনুসারে MongoDB থেকে একটি ডকুমেন্ট খুঁজে পাওয়া।item.get("description", None):descriptionফিল্ডটি যদি না থাকে তবেNoneফেরত দেয়।
3. Update (ডেটা আপডেট করা)
MongoDB তে ডেটা আপডেট করতে update_one() ব্যবহার করা হয়।
@app.put("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
updated_item = await app.db["items"].find_one_and_update(
{"_id": item_id},
{"$set": item.dict()},
return_document=True # MongoDB-তে আপডেট হওয়া ডকুমেন্ট ফেরত আনবে
)
if updated_item is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")
return updated_item
এখানে:
find_one_and_update(): এটি MongoDB ডকুমেন্টটি খুঁজে পায় এবং আপডেট করে।$set: MongoDB আপডেট অপারেশনে নতুন মান সেট করতে ব্যবহৃত হয়।
4. Delete (ডেটা মুছে ফেলা)
MongoDB তে ডেটা মুছতে delete_one() ব্যবহার করা হয়।
@app.delete("/items/{item_id}")
async def delete_item(item_id: str):
result = await app.db["items"].delete_one({"_id": item_id})
if result.deleted_count == 0:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")
return {"message": "Item deleted successfully"}
এখানে:
delete_one(): MongoDB থেকে একটি ডকুমেন্ট মুছে ফেলা হয়।deleted_count: এটি জানায় যে ডকুমেন্ট কতটি মুছে ফেলা হয়েছে। যদি0হয়, তাহলে ডকুমেন্টটি পাওয়া যায়নি।
Step 4: FastAPI অ্যাপ চালানো
uvicorn main:app --reload
এটি আপনার FastAPI অ্যাপকে চালু করবে এবং MongoDB-এর সাথে সংযোগ স্থাপন করবে।
MongoDB এর সাথে CRUD অপারেশন এর সম্পূর্ণ উদাহরণ:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from motor.motor_asyncio import AsyncIOMotorClient
from bson import ObjectId
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
@app.on_event("startup")
async def startup_db():
app.mongodb_client = AsyncIOMotorClient("mongodb://localhost:27017")
app.db = app.mongodb_client["mydatabase"]
@app.on_event("shutdown")
async def shutdown_db():
app.mongodb_client.close()
# Create Item
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
item_dict = item.dict()
result = await app.db["items"].insert_one(item_dict)
item_dict["_id"] = str(result.inserted_id)
return item_dict
# Read Item
@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: str):
item = await app.db["items"].find_one({"_id": ObjectId(item_id)})
if item is None:
raise HTTPException(status_code=404, detail="Item not found")
item["_id"] = str(item["_id"])
return item
# Update Item
@app.put("/items/{item_id}", response_model=Item)
async def update_item(item_id: str, item: Item):
updated_item = await app.db["items"].find_one_and_update(
{"_id": ObjectId(item_id)},
{"$set": item.dict()},
return_document=True
)
if updated_item is None:
raise HTTPException(status_code=404, detail="Item not found")
updated_item["_id"] = str(updated_item["_id"])
return updated_item
# Delete Item
@app.delete("/items/{item_id}")
async def delete_item(item_id: str):
result = await app.db["items"].delete_one({"_id": ObjectId(item_id)})
if result.deleted_count == 0:
raise HTTPException(status_code=404, detail="Item not found")
return {"message": "Item deleted successfully"}
FastAPI এবং MongoDB একসাথে ব্যবহার করে আপনি সহজেই CRUD অপারেশন সম্পাদন করতে পারবেন। MongoDB এর অ্যাসিঙ্ক্রোনাস ড্রাইভার motor ব্যবহার করে FastAPI-র মাধ্যমে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করা সম্ভব। এটি ডেটা ইনসার্ট, আপডেট, ডিলিট, এবং রিড করার প্রক্রিয়াকে দ্রুত এবং স্কেলেবল করে তোলে।
Read more